import Vue from 'vue';
import App from './App';
import router from './router';

import qs from 'qs';
Vue.prototype.$qs = qs;
if (process.env.NODE_ENV === 'development') {
  console.log(
    '%c 项目中可用 qs（$qs.parse()/$qs.stringify()',
    'background:pink;'
  );
} //仅开发提示

import store from './Store';

import { axios, api } from './Axios';
Vue.prototype.$axios = axios;
Vue.prototype.$api = api;
import VueAxios from 'vue-axios';
Vue.use(VueAxios, axios);

import VantGreen from 'vant-green';
import 'vant-green/lib/index.css';
Vue.use(VantGreen);

import '@/assets/reset.css';
import 'font-awesome/css/font-awesome.min.css';

import Moment from 'moment';
import 'moment/locale/zh-cn';
Vue.prototype.$moment = Moment;
if (process.env.NODE_ENV === 'development') {
  console.log('%c 项目中可用 moment（$moment', 'background:pink;');
} //仅开发提示

import _ from 'lodash';
Vue.prototype._ = _;
if (process.env.NODE_ENV === 'development') {
  console.log('%c 项目中可用 lodash（_）', 'background:pink;');
} //仅开发提示

import MD5 from 'md5';
Vue.prototype.MD5 = MD5;
Vue.filter('MD5', function(value) {
  return MD5(value);
});
if (process.env.NODE_ENV === 'development') {
  console.log('%c 项目中MD5已全局配置filter', 'background:pink;');
} //仅开发提示

import Mockjs from 'mockjs';
Vue.prototype.$mock = Mockjs;
if (process.env.NODE_ENV === 'development') {
  console.log('%c 项目中可用 mock（$mock）', 'background:pink;');
} //仅开发提示

Vue.filter('value2label', function(val, opts) {
  let obj = opts.find((v) => {
    return v.value == val;
  });
  if (obj) return obj.label;
  return val;
}); //通常用于根据 选项值 反推 选项名 的场景
Vue.filter('tel8star', function(tel, noReplace) {
  if (noReplace) return tel;
  return tel
    .split('')
    .reduce((t, v, i, a) => {
      let min = Math.min(3, (a.length - 3) / 2);
      let max = Math.min(4, (a.length - 4) / 2);
      if (i >= min && i <= a.length - 1 - max) {
        t.push('*');
      } else {
        t.push(v);
      }
      return t;
    }, [])
    .join('');
}); //通常用于给电话号码打星号，不过有时可能因为某些原因（noReplace）又不打码了
Vue.filter('EmptyTableCell', function(val, str) {
  if (str == undefined) {
    str = '--';
  }
  return val == '' ? str : val;
}); //通常用于表格单元格中空字符串时，显示预设的占位符用

export const bus = new Vue(); //事件总线
// 组件中使用 bus.$emit('事件名',参数对象) 发布事件
// 另一个组件中使用 bus.$on('事件名', (参数对象) => {}) 订阅事件

Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>',
});
